import axios from 'axios'
import router from '../router/index'

// 创建axios实例
const instance = axios.create({
  baseURL: '/api', // 基础URL，可根据实际情况修改
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 从localStorage获取token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 后端总是返回Result对象，我们需要解析它
    const { code, message, data } = response.data
    
    // 处理Token失效的情况（code为403）
    if (code === 403) {
      // 清除无效的token
      localStorage.removeItem('token')
      
      // 获取当前页面路径，用于登录成功后重定向
      const currentPath = window.location.pathname + window.location.search
      
      // 使用router进行重定向，确保路由正确跳转
      router.push({
        path: '/login',
        query: { redirect: currentPath }
      }).catch(() => {
        // 捕获导航错误，避免控制台警告
        console.log('导航到登录页面')
      })
      
      // 抛出错误，让调用者可以处理
      throw new Error(message || 'Token已失效，请重新登录')
    }
    
    // 对于其他状态码，直接返回数据
    return response.data
  },
  error => {
    // 处理HTTP响应错误
    if (error.response) {
      // 检查HTTP状态码
      if (error.response.status === 403) {
        // 这种情况通常不会发生，因为响应拦截器已经处理了code=403的情况
        // 但为了安全起见，保留这个检查
        localStorage.removeItem('token')
        
        const currentPath = window.location.pathname + window.location.search
        
        router.push({
          path: '/login',
          query: { redirect: currentPath }
        }).catch(() => {
          console.log('导航到登录页面')
        })
      }
    } else if (error.code === 'ECONNABORTED') {
      console.error('请求超时')
    }
    return Promise.reject(error)
  }
)

export default instance